package com.bingxue.edu.framework.mybatis.query;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 动态查询条件注解
 *
 * @author panbo
 * @since 2024/7/1
 */
@Target(ElementType.FIELD)
@Repeatable(Query.List.class)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Query {

    /**
     * 查询条件。默认为eq
     */
    QueryType type() default QueryType.EQ;

    /**
     * 查询条件的字段名称 (是实体类字段名称而不是数据库字段名称)
     * 默认获取当前字段名称
     */
    String field() default "";

    /**
     * 关联查询
     */
    Join[] join() default {};

    /**
     * 是否忽略
     */
    boolean ignored() default false;

    /**
     * 在同一个字段上支持多个{@link Query}，之间会用采用OR的方式连接
     * PS: 当存在多个Query时，只能获取到Query.List，获取不到单个Query
     */
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        Query[] value();
    }

}

